package com.toycloud.common.utils;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class StringToListTypeHandler extends BaseTypeHandler<List<String>> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
        // 将 List<String> 转换成符合数据库存储的字符串格式
        String jsonString = parameter.toString();
        ps.setString(i, jsonString);
    }

    @Override
    public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String json = rs.getString(columnName);
        return parseStringToList(json);
    }

    @Override
    public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String json = rs.getString(columnIndex);
        return parseStringToList(json);
    }

    @Override
    public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String json = cs.getString(columnIndex);
        return parseStringToList(json);
    }

    private List<String> parseStringToList(String json) {
        if (json == null || json.isEmpty() || json.equals("[]")) {
            return new ArrayList<>();
        }

        // 去掉最外层的中括号并分割字符串
        json = json.substring(1, json.length() - 1); // 去掉 []
        String[] items = json.split(",\\s*"); // 以逗号分隔并去除多余空格

        // 转换每个元素为 String 并添加到 List 中
        List<String> result = new ArrayList<>();
        for (String item : items) {
            result.add(item.replaceAll("^\"|\"$", "").trim()); // 去除可能的引号并去掉空格
        }
        return result;
    }
}
